AWS DataSyncでは転送するファイル名のバイト数計算をどのように行っているのか確認してみた

AWS DataSyncでは転送するファイル名のバイト数計算をどのように行っているのか確認してみた

文字数ではなく、バイト数で計算されるので注意しよう
Clock Icon2024.10.14

DataSyncでは転送するファイル名のバイト数計算をどのように行っているのか気になる

こんにちは、のんピ(@non____97)です。

皆さんはDataSyncでは転送するファイル名のバイト数計算をどのように行っているのか気になったことはありますか? 私はあります。

DataSyncのクォータを確認したところ、以下のような記載がありました。

説明 制限
ファイルパスの最大長 4,096 バイト
ファイルパスコンポーネント (ファイル名、ディレクトリ、またはサブディレクトリ) の最大長 255 バイト
Windows ドメインの最大長 253 文字
サーバホスト名の最大長 255 文字

AWS DataSync のクォータ - AWS DataSync

ファイルパスの全長やファイル名やディレクトリ名ごとの長さはバイトで計算されます。

では、DataSyncでは転送するファイル名のバイト数計算をどのように行っているのでしょうか。

同じ文字であっても文字コードによってバイト数は変動します。

例) "あ" のバイト数

  • UTF-16 : 2バイト (4230)
  • UTF-8 : 3バイト (E38181)

WindowsであればUTF-16LEで、ONTAPであればUTF-8でそれぞれエンコードされていると考えています。

そのため、DataSyncでは各ロケーションで設定されているデフォルトの文字コードでバイト数を計算しているのか、それともUTF-8など固定の文字コードで判定しているかのどちらかかなと想像しています。

せっかくなので検証して確認してみます。

いきなりまとめ

  • DataSyncで転送するファイル名のバイト数計算はUTF-8でエンコード後のバイト数で行っている
  • ファイルパスコンポーネントの長さに対するクォータは各階層のディレクトリ名、ファイル名がUTF-8で255バイト以下である必要があることを示している

やってみる

検証環境

検証環境は以下のとおりです。

AWS DataSyncのSMBファイルサーバーのロケーションではSMBファイル共有名にマルチバイト文字を含めることができない件検証環境構成図.png

以下記事で検証した環境をそのまま再利用します。

https://dev.classmethod.jp/articles/aws-datasync-smb-share-name-multibyte-character-limitation/

ファイルの用意

AD DC上に以下のファイルを用意しました。ファイル名に文字数、UTF-8の場合の文字数、UTF-16の場合の文字数を表現しています。

  • このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt
  • このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt
  • このファイル名は文字数108文字、UTF-8で254バイトで、UTF-16LEで216バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!.txt
  • このファイル名は文字数128文字、UTF-8で180バイトで、UTF-16LEで256バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt
  • このファイル名は文字数127文字、UTF-8で179バイトで、UTF-16LEで254バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt

ツリーで表現すると以下のとおりです。

> tree "C:\SMB share\" /f
Folder PATH listing
Volume serial number is 00000191 F214:E54F
C:\SMB SHARE
└───SMB日本語フォルダ
        SMB テキスト.txt
        このファイル名は文字数108文字、UTF-8で254バイトで、UTF-16LEで216バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!.txt
        このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt
        このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt
        このファイル名は文字数127文字、UTF-8で179バイトで、UTF-16LEで254バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt
        このファイル名は文字数128文字、UTF-8で180バイトで、UTF-16LEで256バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt

UTF-8とUTF-16でそれぞれファイル名が255バイトを超過しているファイルを抽出するスクリプトを用意し、叩きます。

UTF-8でファイル名が255バイト超過しているファイル
# 検査するディレクトリのパスを指定
$directoryPath = "C:\SMB share\"

# 255バイトを超過するファイルを検索し、情報を収集
$longFileNames = Get-ChildItem -Path $directoryPath -Recurse -File | 
    ForEach-Object {
        $fileNameBytes = [System.Text.Encoding]::UTF8.GetBytes($_.Name)
        if ($fileNameBytes.Length -gt 255) {
            [PSCustomObject]@{
                ByteLength = $fileNameBytes.Length
                FullPath = $_.FullName
            }
        }
    }

# 結果の表示
if ($longFileNames) {
  Write-Host "以下のファイルのファイル名がUTF-8で255バイトを超過しています:"
  $longFileNames | Format-Table -AutoSize -Wrap
} else {
  Write-Host "UTF-8で255バイトを超過するファイル名は見つかりませんでした。"
}
以下のファイルのファイル名がUTF-8で255バイトを超過しています:

ByteLength FullPath
---------- --------
       256 C:\SMB share\SMB日本語フォルダ\このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだあああああああああああああああああああああああああああああああああああああ
           あああああああああああ!!!!!!!!!!!.txt                                                                        

UTF-16でファイル名が255バイト超過しているファイル
# 検査するディレクトリのパスを指定
$directoryPath = "C:\SMB share\"

# 255バイトを超過するファイルを検索し、情報を収集
$longFileNames = Get-ChildItem -Path $directoryPath -Recurse -File | 
    ForEach-Object {
        $fileNameBytes = [System.Text.Encoding]::Unicode.GetBytes($_.Name)
        if ($fileNameBytes.Length -gt 255) {
            [PSCustomObject]@{
                ByteLength = $fileNameBytes.Length
                FullPath = $_.FullName
            }
        }
    }

# 結果の表示
if ($longFileNames) {
  Write-Host "以下のファイルのファイル名がUTF-16で255バイトを超過しています:"
  $longFileNames | Format-Table -AutoSize -Wrap
} else {
  Write-Host "UTF-16で255バイトを超過するファイル名は見つかりませんでした。"
}
以下のファイルのファイル名がUTF-16で255バイトを超過しています:

ByteLength FullPath
---------- --------
       256 C:\SMB share\SMB日本語フォルダ\このファイル名は文字数128文字、UTF-8で180バイトで、UTF-16LEで256バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt

意図したファイルが抽出されました。

DataSyncタスクの実行

それではDataSyncタスクの実行を行います。

実行するDataSyncタスクはこちらの記事で最後に作成したものを利用します。

実行すると、Transfer and verification completed. Verification detected mismatches. See a list of files with mismatches in CloudWatch logs. If no files are listed in CloudWatch logs, contact AWS Support.とエラーになりました。

1.DataSyncタスクの実行結果.png

CloudWatch Logsに出力されたログを確認してみます。

2024-10-14T18:07:25.344+09:00 [INFO] Request to start task-0550eec6fdf747ccd.
2024-10-14T18:10:15.842+09:00 [INFO] Execution exec-04777c6ca97d4ae79 started.
2024-10-14T18:10:17.909+09:00 [NOTICE] Transferred file /SMB share/SMB日本語フォルダ/このファイル名は文字数127文字、UTF-8で179バイトで、UTF-16LEで254バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt, 0 bytes
2024-10-14T18:10:17.909+09:00 [NOTICE] Transferred file /SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt, 0 bytes
2024-10-14T18:10:17.910+09:00 [NOTICE] Transferred file /SMB share/SMB日本語フォルダ/このファイル名は文字数108文字、UTF-8で254バイトで、UTF-16LEで216バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!.txt, 0 bytes
2024-10-14T18:10:17.910+09:00 [NOTICE] Transferred file /SMB share/SMB日本語フォルダ/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt, 0 bytes
2024-10-14T18:10:17.911+09:00 [NOTICE] Transferred file /SMB share/SMB日本語フォルダ/このファイル名は文字数128文字、UTF-8で180バイトで、UTF-16LEで256バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt, 0 bytes
2024-10-14T18:10:17.951+09:00 [ERROR] Deferred error: create(name="/SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt", hard=0, target=, mode=100644, dev=0, flags=241): File name too long
2024-10-14T18:10:18.032+09:00 [NOTICE] Transferred directory metadata /SMB share/SMB日本語フォルダ
2024-10-14T18:10:18.159+09:00 [ERROR] Failed to read metadata for destination file /SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt: File name too long
2024-10-14T18:10:18.161+09:00 [ERROR] Failed to read contents for destination file /SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt: File name too long
2024-10-14T18:10:18.232+09:00 [NOTICE] Verified directory /SMB share/SMB日本語フォルダ
2024-10-14T18:10:18.232+09:00 [NOTICE] Verified file /SMB share/SMB日本語フォルダ/このファイル名は文字数108文字、UTF-8で254バイトで、UTF-16LEで216バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!.txt, 0 bytes
2024-10-14T18:10:18.232+09:00 [NOTICE] Verified file /SMB share/SMB日本語フォルダ/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt, 0 bytes
2024-10-14T18:10:18.232+09:00 [NOTICE] Verified file /SMB share/SMB日本語フォルダ/このファイル名は文字数127文字、UTF-8で179バイトで、UTF-16LEで254バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt, 0 bytes
2024-10-14T18:10:18.232+09:00 [NOTICE] Verified file /SMB share/SMB日本語フォルダ/このファイル名は文字数128文字、UTF-8で180バイトで、UTF-16LEで256バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt, 0 bytes
2024-10-14T18:10:18.232+09:00 [NOTICE] Verification failed <> /SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt
2024-10-14T18:10:18.232+09:00 [NOTICE] /SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt   srcMeta: type=R mode=0755 uid=65534 gid=65534 size=0 atime=1728895333/158277400 mtime=1728895333/158277400 extAttrsHash=429636278
2024-10-14T18:10:18.232+09:00 [NOTICE]   srcHash: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
2024-10-14T18:10:18.232+09:00 [NOTICE] /SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt   dstMeta: type=R mode=0755 uid=65534 gid=65534 size=0 atime=0/0 mtime=0/0 extAttrsHash=0 
2024-10-14T18:10:18.232+09:00 [NOTICE]   dstHash: 0000000000000000000000000000000000000000000000000000000000000000
2024-10-14T18:10:18.291+09:00 [INFO] Execution exec-04777c6ca97d4ae79 finished with status Transfer and verification completed. Verification detected mismatches. See a list of files with mismatches in CloudWatch logs. If no files are listed in CloudWatch logs, contact AWS Support..

どうやらファイル名の長さがUTF-8で255バイトを超過しているファイルの転送が失敗しているようです。

それ以外のファイルは正常に転送完了していました。

転送先を確認すると、確かにUTF-8で255バイト以外のファイルは転送がされています。

> tree "\\SMB-SERVER.corp.non-97.net\FSxN vol_ntfs\SMB share" /f
Folder PATH listing for volume FSxN vol_ntfs
Volume serial number is 00000073 801C:153E
\\SMB-SERVER.CORP.NON-97.NET\FSXN VOL_NTFS\SMB SHARE
├───.aws-datasync
├───SMB share
│   └───SMB日本語フォルダ
│           SMB テキスト.txt
│
└───SMB日本語フォルダ
        SMB テキスト.txt
        このファイル名は文字数108文字、UTF-8で254バイトで、UTF-16LEで216バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!.txt
        このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt
        このファイル名は文字数127文字、UTF-8で179バイトで、UTF-16LEで254バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt
        このファイル名は文字数128文字、UTF-8で180バイトで、UTF-16LEで256バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt

このことからDataSyncで転送するファイル名のバイト数計算はUTF-8でエンコード後のバイト数で行っていることが分かります。

ファイルパスコンポーネントのクォータの確認

DataSyncのクォータのファイルパスコンポーネント (ファイル名、ディレクトリ、またはサブディレクトリ) の最大長という表現的に各コンポーネントに適用される認識です。

例えば<SMBサーバーのホスト名>.<SMBサーバーのドメイン名>\<SMB共有名>\<ディレクトリA名>\<ディレクトリB名>\<ファイル名>というフルパスがある場合、<SMB共有名>, <ディレクトリA名>, <ディレクトリB名>, <ファイル名>のそれぞれが255バイト以下である必要があると考えます。

実際に試してみます。

以下のような構造のディレクトリを用意しました。また、表示されていませんが、追加したディレクトリ配下にはこのファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txtを作成しています。

> tree "C:\SMB share\" /f
Folder PATH listing
Volume serial number is 0000017A F214:E54F
C:\SMB SHARE
└───SMB日本語フォルダ
    │   SMB テキスト.txt
    │   このファイル名は文字数108文字、UTF-8で254バイトで、UTF-16LEで216バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!.txt
    │   このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt
    │   このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt
    │   このファイル名は文字数127文字、UTF-8で179バイトで、UTF-16LEで254バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt
    │   このファイル名は文字数128文字、UTF-8で180バイトで、UTF-16LEで256バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt
    │
    ├───このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!
    │   └───このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!
    ├───このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!
    │   └───このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!
    └───このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!
        └───このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!

この状態で再度DataSyncタスクを実行します。

すると、先ほどと同様のエラーが出力されました。

2.ディレクトリを追加して再度DataSyncタスクを実行.png

CloudWatch Logsに出力されたログを確認してみます。

2024-10-14T23:16:03.783+09:00 [INFO] Request to start task-0550eec6fdf747ccd.
2024-10-14T23:17:58.348+09:00 [INFO] Execution exec-00b2030f9415bb642 started.
2024-10-14T23:18:04.796+09:00 [ERROR] Failed to create destination directory /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!: File name too long
2024-10-14T23:18:04.797+09:00 [NOTICE] Created directory /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!
2024-10-14T23:18:04.798+09:00 [NOTICE] Created directory /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!
2024-10-14T23:18:04.799+09:00 [ERROR] Failed to create destination directory /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!: File name too long
2024-10-14T23:18:04.801+09:00 [NOTICE] Created directory /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!
2024-10-14T23:18:04.801+09:00 [NOTICE] Created directory /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!
2024-10-14T23:18:05.314+09:00 [ERROR] Failed to create destination directory /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!: File name too long
2024-10-14T23:18:05.315+09:00 [ERROR] Failed to create destination directory /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!: File name too long
2024-10-14T23:18:05.319+09:00 [NOTICE] Transferred file /SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt, 0 bytes
2024-10-14T23:18:05.319+09:00 [NOTICE] Transferred file /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt, 0 bytes
2024-10-14T23:18:05.319+09:00 [NOTICE] Transferred file /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt, 0 bytes
2024-10-14T23:18:05.319+09:00 [NOTICE] Transferred file /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt, 0 bytes
2024-10-14T23:18:05.360+09:00 [ERROR] Deferred error: create(name="/SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt", hard=0, target=, mode=100644, dev=0, flags=241): File name too long
2024-10-14T23:18:05.360+09:00 [ERROR] Deferred error: create(name="/SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt", hard=0, target=, mode=100644, dev=0, flags=241): File name too long
2024-10-14T23:18:05.384+09:00 [NOTICE] Transferred directory metadata /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!
2024-10-14T23:18:05.384+09:00 [NOTICE] Transferred directory metadata /SMB share/SMB日本語フォルダ
2024-10-14T23:18:05.384+09:00 [NOTICE] Transferred directory metadata /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!
2024-10-14T23:18:05.384+09:00 [NOTICE] Transferred directory metadata /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!
2024-10-14T23:18:05.384+09:00 [NOTICE] Transferred directory metadata /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!
2024-10-14T23:18:05.384+09:00 [NOTICE] Transferred directory metadata /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!
2024-10-14T23:18:05.384+09:00 [NOTICE] Transferred directory metadata /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!
2024-10-14T23:18:05.428+09:00 [ERROR] Deferred error: WriteFileExtAttr2 failed to setextattrlist(filename="/SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!"): File name too long
2024-10-14T23:18:05.428+09:00 [ERROR] Deferred error: WriteFileExtAttr2 failed to setextattrlist(filename="/SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!"): File name too long
2024-10-14T23:18:05.451+09:00 [ERROR] Failed to read metadata for destination file /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt: File name too long
2024-10-14T23:18:05.451+09:00 [ERROR] Failed to read metadata for destination file /SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt: File name too long
2024-10-14T23:18:05.452+09:00 [ERROR] Failed to read contents for destination file /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt: File name too long
2024-10-14T23:18:05.452+09:00 [ERROR] Failed to read contents for destination file /SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt: File name too long
2024-10-14T23:18:05.467+09:00 [NOTICE] Verified directory /SMB share/SMB日本語フォルダ
2024-10-14T23:18:05.467+09:00 [NOTICE] Verified directory /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!
2024-10-14T23:18:05.467+09:00 [NOTICE] Verified directory /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!
2024-10-14T23:18:05.467+09:00 [NOTICE] Verified file /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!/このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt, 0 bytes
2024-10-14T23:18:05.467+09:00 [NOTICE] Verified directory /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!
2024-10-14T23:18:05.467+09:00 [NOTICE] Verified directory /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!
2024-10-14T23:18:05.467+09:00 [NOTICE] Verified file /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt, 0 bytes
2024-10-14T23:18:05.467+09:00 [NOTICE] Verification failed <> /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt
2024-10-14T23:18:05.467+09:00 [NOTICE] /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt   srcMeta: type=R mode=0755 uid=65534 gid=65534 size=0 atime=1728913961/889082400 mtime=1728895344/574293100 extAttrsHash=1791132342
2024-10-14T23:18:05.467+09:00 [NOTICE]   srcHash: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
2024-10-14T23:18:05.467+09:00 [NOTICE] /SMB share/SMB日本語フォルダ/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!/このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt   dstMeta: type=R mode=0755 uid=65534 gid=65534 size=0 atime=0/0 mtime=0/0 extAttrsHash=0 2024-10-14T23:18:05.467+09:00 [NOTICE]   dstHash: 0000000000000000000000000000000000000000000000000000000000000000
2024-10-14T23:18:05.467+09:00 [NOTICE] Verification failed <> /SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt
2024-10-14T23:18:05.467+09:00 [NOTICE] /SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt   srcMeta: type=R mode=0755 uid=65534 gid=65534 size=0 atime=1728895333/158277400 mtime=1728895333/158277400 extAttrsHash=429636278
2024-10-14T23:18:05.467+09:00 [NOTICE]   srcHash: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
2024-10-14T23:18:05.467+09:00 [NOTICE] /SMB share/SMB日本語フォルダ/このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt   dstMeta: type=R mode=0755 uid=65534 gid=65534 size=0 atime=0/0 mtime=0/0 extAttrsHash=0 2024-10-14T23:18:05.467+09:00 [NOTICE]   dstHash: 0000000000000000000000000000000000000000000000000000000000000000 2024-10-14T23:18:05.487+09:00 [INFO] Execution exec-00b2030f9415bb642 finished with status Transfer and verification completed. Verification detected mismatches. See a list of files with mismatches in CloudWatch logs. If no files are listed in CloudWatch logs, contact AWS Support..

ディレクトリ名の長さがUTF-8で255バイトを超過しているもののみが転送失敗し、それ以外のものは転送が正常に完了していそうです。

実際に転送先にアクセスすると、確かにディレクトリ名とファイル名がそれぞれ255バイト未満のものは正常に転送が完了していました。

> tree "\\SMB-SERVER.corp.non-97.net\FSxN vol_ntfs\SMB share" /f
Folder PATH listing for volume FSxN vol_ntfs
Volume serial number is 000000B0 801C:153E
\\SMB-SERVER.CORP.NON-97.NET\FSXN VOL_NTFS\SMB SHARE
├───.aws-datasync
├───SMB share
│   └───SMB日本語フォルダ
│           SMB テキスト.txt
│
└───SMB日本語フォルダ
    │   SMB テキスト.txt
    │   このファイル名は文字数108文字、UTF-8で254バイトで、UTF-16LEで216バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!.txt
    │   このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt
    │   このファイル名は文字数127文字、UTF-8で179バイトで、UTF-16LEで254バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt
    │   このファイル名は文字数128文字、UTF-8で180バイトで、UTF-16LEで256バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt
    │
    ├───このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!
    └───このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!

> dir -R "\\SMB-SERVER.corp.non-97.net\FSxN vol_ntfs\SMB share\SMB日本語フォルダ\"
                                                                            f

    Directory: \\SMB-SERVER.corp.non-97.net\FSxN vol_ntfs\SMB share\SMB日本語フォルダ


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        10/14/2024   1:53 PM                このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!
d-----        10/14/2024   1:53 PM                このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!
-a----        10/11/2024   7:21 AM             20 SMB テキスト.txt                                                                                                                            
-a----        10/14/2024   8:42 AM              0 このファイル名は文字数108文字、UTF-8で254バイトで、UTF-16LEで216バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!.txt
-a----        10/14/2024   8:42 AM              0 このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt
-a----        10/14/2024   8:43 AM              0 このファイル名は文字数127文字、UTF-8で179バイトで、UTF-16LEで254バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt
-a----        10/14/2024   8:42 AM              0 このファイル名は文字数128文字、UTF-8で180バイトで、UTF-16LEで256バイトだあ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!.txt


    Directory: \\SMB-SERVER.corp.non-97.net\FSxN vol_ntfs\SMB share\SMB日本語フォルダ\このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        10/14/2024   1:53 PM                このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!


    Directory: \\SMB-SERVER.corp.non-97.net\FSxN vol_ntfs\SMB share\SMB日本語フォルダ\このディレクトリ名は文字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!\このディレクトリ名は文
    字数99文字、UTF-8で254バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        10/14/2024   8:42 AM              0 このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt


    Directory: \\SMB-SERVER.corp.non-97.net\FSxN vol_ntfs\SMB share\SMB日本語フォルダ\このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        10/14/2024   1:52 PM                このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!


    Directory: \\SMB-SERVER.corp.non-97.net\FSxN vol_ntfs\SMB share\SMB日本語フォルダ\このディレクトリ名は文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!\このディレクトリ名は
    文字数99文字、UTF-8で255バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        10/14/2024   8:42 AM              0 このファイル名は文字数109文字、UTF-8で255バイトで、UTF-16LEで218バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!.txt

このことからファイルパスコンポーネントの長さに対するクォータは各階層のディレクトリ名、ファイル名がUTF-8で255バイト以下である必要があることを示していると判断できます。

文字数ではなく、バイト数で計算されるので注意しよう

AWS DataSyncでは転送するファイル名のバイト数計算をどのように行っているのか確認してみました。

そもそもクォータは文字数ではなく、バイト数で計算されるので注意しましょう。

DataSyncを使ってファイル転送する前に事前にUTF-8で255バイトを超過するファイルパスコンポーネントがどのぐらいあるのか確認すると良いでしょう。超過しているものはRobocopyなど別の方法で転送する必要があります。

ファイル名または各階層のディレクトリ名が255バイトを超過しているものをCSVファイルに出力するように改修したものが以下です。調査にお役立てください。

# 検査するディレクトリのパスを指定
$directoryPath = "C:\SMB share\"

$outputFile = "C:\SMB share\over-255byte-filepath-component.csv"

# 255バイトを超過するファイルを検索し、情報を収集
$longFileNames = Get-ChildItem -Path $directoryPath -Recurse | 
    ForEach-Object {
        $fileNameBytes = [System.Text.Encoding]::UTF8.GetBytes($_.Name)
        if ($fileNameBytes.Length -gt 255) {
            [PSCustomObject]@{
                ByteLength = $fileNameBytes.Length
                FullPath = $_.FullName
            }
        }
    }

# 結果の表示
if ($longFileNames) {
    $longFileNames | Export-Csv -Path $outputFile -NoTypeInformation -Encoding UTF8
    Write-Host "結果を $outputFile に出力しました。"
    Write-Host "UTF-8で255バイトを超過するファイルまたはディレクトリ数: $($longFileNames.Count)"
} else {
    "UTF-8で255バイトを超過するファイル名は見つかりませんでした。" | Out-File -FilePath $outputFile -Encoding UTF8
    Write-Host "結果を $outputFile に出力しました。"
}
実行後にターミナルに出力された結果
結果を C:\SMB share\over-255byte-filepath-component.csv に出力しました。
UTF-8で255バイトを超過するファイルまたはディレクトリ数: 3
over-255byte-filepath-component.csvに出力された内容
"ByteLength","FullPath"
"256","C:\SMB share\SMB日本語フォルダ\このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!"
"256","C:\SMB share\SMB日本語フォルダ\このファイル名は文字数110文字、UTF-8で256バイトで、UTF-16LEで220バイトだああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!.txt"
"256","C:\SMB share\SMB日本語フォルダ\このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!\このディレクトリ名は文字数100文字、UTF-8で256バイトだあああああああああああああああああああああああああああああああああああああああああああああああああああああああああ!!!!!!!!!!!"

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.